#ifndef POLYGONE_H
#define POLYGONE_H

#include <QString>
#include <vector>
#include "./Point.h"
#include "./Image.h"

		/* Fonction non membre */
		void	displayString ( QString _s, int _x, int _y );			/* Affiche la chaine de caractère _s a la position (_x, _y) de la fenetre */

class Polygone
{
	private :
		std::vector<Point*> list;
		int nbPts;
		
	public :
		Polygone();
		Polygone(const Polygone &_pol);									/* Constructeur de copie */
	
		~Polygone();
		
		int getNbPts();
		Point* getPoint ( int _i );
		
		Polygone operator=( const Polygone &_p);
		
		bool isEmpty();													/* Renvoie true si le polygone est vide (son nb de pts est 0) */
		
		void addPoint( Point* _p );										/* Ajoute un point au polygone */
		bool find ( Point * _p );										/* Renvoie true si le point _p fait partie du polygone */
		void deleteLastPoint();											/* Supprime le dernier point du polygone */
		void deletePoint(Point* _p);									/* Supprime le point _p s'il fait partie du polygone */
		void replacePoint (Point* _p1, Point* _p2);						/* Remplace le point _p1 par _p2 dans le polygone si _p1 en fait partie */
		
		void clear();													/* Reiniialise le polygone : remet son nombre de points à 0 et vide le tableau de points */
		
		void print();													/* Affiche dans la console le nombre de points du polygone et les coordonnées de tous ces points */
		void display();													/* Affiche les contours du polygone */
		void display(float _r, float _g, float _b);						/* Affiche les contours du polygone en couleur */
		void displayFilled(float _r, float _g, float _b);				/* Affiche le polygone plein en couleur */
		void displayFilled(float _r, float _g, float _b, float _a);		/* Affiche le polygone plein en couleur et transparence */
		void displayPoints(float _r, float _g, float _b);				/* Affiche tous les points du polygone en couleur */
		void displayText( QString _s );									/* Affiche le texte _s centré sur le barycentre du polygone */
		
		/* displayPions a revoir ulterieurement, ici c'est une version basique pour les tests */
		void displayPions( int _nbPions, Image _i );					/* Affiche les pions présents sur la case. _i est l'image des pions */
		
		bool contains ( Point* _p );									/* Renvoie true si le point _p est dans le polygone, false sinon */
		bool contains ( int _x, int _y );								/* Renvoie true si le point (_x,_y) est dans le polygone, false sinon */
};

#endif
